package ooo.reindeer.data.util;

import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;

import java.util.ArrayList;
import java.util.concurrent.TimeUnit;

/**
 * @ClassName Benchmark
 * @Author songbailin
 * @Date 2022/8/30 14:57
 * @Version 1.0
 * @Description TODO
 */

@State(Scope.Benchmark)
@OutputTimeUnit(TimeUnit.SECONDS)
@Threads(Threads.MAX)
public class CoderBenchmark {
    UintVarTVL data = new UintVarTVL().setType((short) 1).setArray(new ArrayList<>())
            .setBaseString("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678-1");
    @Setup
    public void setUp() {
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("2222");
        data.getArray().add("3333");
    }


    @Benchmark
    @OutputTimeUnit(TimeUnit.SECONDS)
    @BenchmarkMode(Mode.Throughput)
    @Measurement(iterations = 5)
    @Warmup(iterations = 5)
    @Fork(1)
    @Threads(8)
    public void enCode() {
        ByteDataUtil.toBytesEx(data);
    }

    @Benchmark
    @OutputTimeUnit(TimeUnit.SECONDS)
    @BenchmarkMode(Mode.Throughput)
    @Measurement(iterations = 5)
    @Warmup(iterations = 5)
    @Fork(1)
    @Threads(8)
    public void oldEnCode() {
        ByteDataUtil.toBytes(data);
    }

    public static void main(String[] args) throws RunnerException {
        Options opt = new OptionsBuilder()
                .include(CoderBenchmark.class.getSimpleName()) // .include("JMHF.*") 可支持正则

                .build();

        new Runner(opt).run();
    }
}
